﻿using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Crosland.Automotriz.Logic;
using Crosland.Automotriz.Logic.Linq;
using Crosland.Automotriz.Core;
using Crosland.Automotriz.Seguridad.Entity;
using Crosland.Automotriz.Seguridad.DataAccess;
using Crosland.Automotriz.Seguridad.Business;
namespace Crosland.Automotriz.Web.UserControl
{
    public partial class MenuControl : System.Web.UI.UserControl
    {
        
        LecturaTicketSAP BL_SAP = new LecturaTicketSAP();
        clsUsuarioLogic BL_login = new clsUsuarioLogic();

        /// <summary>
        /// Instancia de clase que permite el acceso a los datos
        /// </summary>
        SeguridadLogic logic = new SeguridadLogic();
        clsOpcionLogic negocioLogic = new clsOpcionLogic();
        clsT_Seg_Historial_Log_DetLogic clst_seg_historial_log_det = new clsT_Seg_Historial_Log_DetLogic();
        /// <summary>
        /// Codigo de la pagina
        /// </summary>
        int CodigoPagina = 0;

        /// <summary>
        /// Permite controlar el evento sobre el arbol de opciones
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void tvOpciones_SelectedNodeChanged(object sender, EventArgs e)
        {
            this.CargarContenido();
        }

        /// <summary>
        /// Carga en el treview, las opciones del sistema
        /// </summary>
        /// <param name="codigoPadre"></param>
        /// <param name="node"></param>
        /// <param name="tree"></param>
        public void LlenarOpciones(int? codigoPadre, TreeNode node, TreeView tree, int? valorInicial)
        {


            if (Session["User"].ToString() == null)
            {

                Response.Redirect(Constantes.PaginaLogin);
            }
            else
            {

                string usu = Session["User"].ToString();
                List<VW_OPCION> treeItemsChild = negocioLogic.ObtenerPorUsuario(usu, (int)codigoPadre);

                foreach (VW_OPCION hijos in treeItemsChild)
                {
                    TreeNode newNode = new TreeNode(hijos.DES_NOMBRE, hijos.ID_OPCION.ToString());
                    if (hijos.ID_OPCION == this.CodigoPagina) newNode.Selected = true;
                    if (codigoPadre == valorInicial) tree.Nodes.Add(newNode);
                    else node.ChildNodes.Add(newNode);
                    this.LlenarOpciones(hijos.ID_OPCION, newNode, null, null);
                }
            }
        }

        protected void CargarContenido()
        {
          
            if (Session["User"].ToString() == null)
            {

                Response.Redirect(Constantes.PaginaLogin);
            }
            else { 
            
            
            

            if (this.tvOpciones.SelectedNode != null)
            {
                string idPagina = this.tvOpciones.SelectedValue.ToString();
                string idPadre = string.Empty;

                if (Request[Constantes.RequestIdPagina] != null)
                {
                    try
                    {
                        idPadre = Request[Constantes.RequestIdPagina].ToString();
                    }
                    catch (Exception)
                    {
                    }
                }



                T_SEG_HISTORIAL_LOG_DET t_seg_historial_log_det = new T_SEG_HISTORIAL_LOG_DET();
                t_seg_historial_log_det.ID_SEG_HISTORIAL_LOG_DET = clst_seg_historial_log_det.UltimoNumeroLog_historial_det() + 1;
                t_seg_historial_log_det.ID_SEG_HISTORIAL_LOG = Global.id_seg_historial;
                t_seg_historial_log_det.ID_USUARIO = Session["User"].ToString() ;
                t_seg_historial_log_det.ID_OPCION = Convert.ToInt32(idPagina);
                t_seg_historial_log_det.FECHA = DateTime.Now;
                clst_seg_historial_log_det.Insertar(t_seg_historial_log_det);


            T_SEG_OPCION entity = this.logic.ObtenerOpcion(int.Parse(idPagina));

                if (entity.IND_TIPO == Constantes.TipoReporte)
                {
                    string url = Constantes.PaginaReporte + "?" + Constantes.RequestReporte + "=" + entity.DES_URL
                        + "&" + Constantes.RequestIdPagina + "=" +
                        idPadre + "&" + Constantes.RequestSubPagina + "=" + idPagina;
                    //Server.Transfer(url);
                    Response.Redirect(url);
                }
                else
                {

                    if (entity.IND_TIPO == "S")
                    {
                        Response.Redirect("~/Seguridad/wFrmDefault.aspx");
                        return;
                    }

                    string url = entity.DES_URL;
                    string indParametro = string.Empty;
                    if (url.Length > 0)
                        indParametro = entity.DES_URL.Substring(url.Length - 1, 1);

                    if (indParametro != "&")
                    {
                        Response.Redirect(entity.DES_URL + "?" + Constantes.RequestIdPagina + "=" +
                            idPadre + "&" + Constantes.RequestSubPagina + "=" + idPagina);

                    }
                    else
                    {
                        Response.Redirect(entity.DES_URL + Constantes.RequestIdPagina + "=" +
                               idPadre + "&" + Constantes.RequestSubPagina + "=" + idPagina);
                    }
                }

            }
            }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (Page.IsPostBack == false)
            {
                if (Request[Constantes.RequestIdPagina] != null)
                {
                    try
                    {
                        int idPadre = int.Parse(Request[Constantes.RequestIdPagina].ToString());

                        if (Request[Constantes.RequestSubPagina] != null)
                        {
                            this.CodigoPagina = int.Parse(Request[Constantes.RequestSubPagina].ToString());
                        }

                        this.tvOpciones.Nodes.Clear();
                        this.LlenarOpciones(idPadre, null, this.tvOpciones, idPadre);

                    }
                    catch (Exception)
                    {

                    }
                }
            }
        }

       
    }

    
}